草庐IT

c - WaitForMultipleObjects 堆栈

全部标签

c++ - 在 C++ 中,如何在没有 pop() 函数的情况下返回堆栈的第二个元素?

我需要帮助在没有pop()的情况下返回堆栈的第二个元素吗?但我不知道如何使用。我的代码:stackst;st.push(10);st.push(20);st.top();//return20如何让这个函数在没有pop()的情况下返回10;谢谢。附言对不起我的英语。 最佳答案 我假设您正在尝试模拟基于堆栈的机器?这是用std::stack做的唯一方法:stackst;st.push(10);st.push(20);inttop=st.top();//return20st.pop();intsecond=st.top();//retur

在堆栈上分配对象时的 C++ 继承错误

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyisitanerrortouseanemptysetofbracketstocallaconstructorwithnoarguments?我有小代码示例:#includeusingnamespacestd;classA{public:voidprint(){cout但是,如果我改成下面的那个,如果可行的话,B*b=newB();b->print();为什么在堆栈上分配对象时它不起作用?

c++ - 堆栈上的构造函数/析构函数调用顺序

我有以下简单代码:classA{inta;public:A(inta):a(a){cout输出是:Constructora=1Printa=1Constructora=2Destructora=2Printa=2Destructora=2我发现a=2有两个析构函数调用,a=1没有一个析构函数调用,而每种情况都有一个构造函数调用。那么在这种情况下如何调用构造函数和析构函数呢? 最佳答案 a=A(2);将使用默认的operator=为a赋新值,将其a::a成员值设置为2。voidf(){Aa(1);//acreatedwithintco

奇怪的堆栈上的 c++ 分配

g++的奇特之处(也许还有其他编译器?):structObject{Object(){std::cout与g++兼容:===========heyhoy!===========heyhoy!第一种分配不构造对象。我错过了什么? 最佳答案 第一种构造实际上并不是构造对象。为了使用默认构造函数在堆栈上创建对象,您必须省略()的ObjectmyObjectOnTheStack;您当前的定义风格声明了一个名为myObjectOnTheStack的函数,该函数返回一个Object。 关于奇怪的堆栈

c++ - 堆栈内存如何工作或函数变量如何在堆栈上分配和访问

当我在这个page上读到Stack和Heap的例子时,我有一个问题,如果像页面上给出的示例一样,一个函数将其所有局部变量放在堆栈上,堆栈实际上是否访问不同的变量?因为堆栈通常只能访问顶部,所以它只能访问函数的一个变量。这是否意味着函数的变量存储在堆栈上的结构中? 最佳答案 堆栈指针,顾名思义,是一个和其他指针一样的指针,它指向普通的标准内存。要访问堆栈的任何区域,您只需向指针添加一个偏移量。如果你从C指针的角度来考虑它,你就有堆栈指针char*stack_pointer=some_memory;这个指针然后可以用作普通指针,包括添加

c++ - 堆栈上的变量是否连续?

我想知道下面代码中的数组a[]和b[]在内存中是否连续:intmain(){inta[3];intb[3];return0;}a[0]、a[1]和a[2]应该是连续的并且对于b,但是对于b相对于a的分配位置是否有任何保证?如果不是,有没有办法强制a和b彼此相邻?即-以便它们在堆栈中彼此相邻分配。 最佳答案 不,C++不保证这些变量在内存中的位置。一个或两个甚至可能不在内存中(例如,如果它们被优化掉了)!为了获得两者之间的相对顺序,至少,您必须将它们封装到struct或class中,即使那样,也会有要考虑的填充/对齐。

C++堆或堆栈分配?

这是栈上的分配:charinStack[10];//andMyStructcl;这应该在堆中分配:char*inHeap=newchar[10];//andMyClasscl=newMyClass();如果MyClass包含一个chartest[10]变量怎么办?这样做:MyClasscl=newMyClass()...意味着MyClass::test的10字节长的内容分配在堆中而不是堆栈中? 最佳答案 会在对象内部分配,这样如果对象在堆上,数组也会在堆上;如果对象在栈上,数组也会在栈上;如果对象在可执行文件的静态内存中,数组也会在

c++ - 使用 C++ STL 中定义的堆栈

#includeusingnamespacestd;intmain(){stacks;inti;for(i=0;i上面的代码有什么问题吗?错误:Infunctionintmain():aggregatevalueusedwhereanintegerwasexpected 最佳答案 stack::pop是一个void函数,它只是丢弃堆栈中的顶部元素,以获取您想要使用的值stack::top.之所以如此是因为exceptionsafetyreasons(如果返回的对象在其复制构造函数中抛出异常会怎样?)。

c++ - 如何为非默认构造体保留堆栈空间?

我基本上会写下面这段代码。我明白为什么它无法编译。Ainstance;//Aisanon-default-constructabletypeandthereforecan'tbeallocatedlikethisif(something){instance=A("foo");//useaconstructorX}else{instance=A(42);//use*another*constructorY}instance.do_something();有没有办法在不涉及堆分配的情况下实现这种行为? 最佳答案 有比在堆栈上显式保留空间

c++ - 堆栈展开真的需要锁吗?

我一直在使用mutrace分析我的代码,并得到以下有趣/令人担忧的结果:Mutex#1260690(0x0x7f87bc8eea40)firstreferencedby:/usr/lib/mutrace/libmutrace.so(pthread_mutex_lock+0x49)[0x7f87be0b76b9]/lib/x86_64-linux-gnu/libgcc_s.so.1(_Unwind_Find_FDE+0x26)[0x7f87bc6eb0e6]mutrace:Showing10mostcontendedmutexes:Mutex#LockedChangedCont.tot.